package student.aistar.dao;

import student.aistar.entity.TVideo;
import student.aistar.entity.User;

import java.sql.SQLException;
import java.util.List;
import java.util.Map;

/**
 * 用户持久层的接口
 * dao = data access object = 对象访问层
 * java和db交互的层
 *
 * 该接口的实现类就是写sql语句的 - jdbc代码的 - 涉及到任何的业务逻辑
 */
public interface IUserDao {
    //具体的功能
    List<User> findAll();

    Integer delById(Integer id);

    User getByUsername(String username);

    int save(User user);

    int update(User user);

    User getById(int id);

    //根据id删除用户,并且把这个用户下的所有的发布的视频全部删除 - 级联删除.
    void delByIdAndVideo(int id);

    //根据id查询用户,如果该用户发布了视频信息,查询这个用户下发布的视频信息 - 级联查询
    List<TVideo> findVideoByUserId();

    //保存一个用户的同时也保存了这个用户的三个视频信息 - 级联插入
    public void saveVideoOfUser(User user, List<TVideo> list);


    /**
     * 方式一: 俩条sql
     * 级联查询 - 级联查询出该用户发布的视频信息
     * @param id
     * @return
     */
    User findUerWithVideos(Integer id);

    List<User> findAllUsersWithVideos();


    /**
     * 统计每个用户发布的视频的数量
     *
     * 前面的User作为不同用户
     * 后面的Integer统计视频个数
     * @return
     */
    Map<User, Integer> countVideo();



    List<User> pageByUser(String userName);

}
